#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
调试登录逻辑
"""

import os
import sys
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from backend.app import create_app
from backend.models import db
from backend.models.user import User
from backend.models.session import UserSession
from backend.schemas.user_schemas import LoginSchema
from backend.utils.auth import get_client_ip, get_user_agent
from backend.utils.datetime_utils import get_local_now
from datetime import datetime

def debug_login():
    """调试登录逻辑"""
    app = create_app()
    with app.app_context():
        try:
            print("🔍 开始调试登录逻辑")
            
            # 1. 测试数据验证
            print("\n1. 测试数据验证...")
            schema = LoginSchema()
            data = {
                "email": "admin@example.com",
                "password": "123456"
            }
            validated_data = schema.load(data)
            print(f"✅ 数据验证通过: {validated_data}")
            
            # 2. 查找用户
            print("\n2. 查找用户...")
            email = validated_data['email']
            password = validated_data['password']
            user = User.query.filter_by(email=email).first()
            if not user:
                print("❌ 用户不存在")
                return
            print(f"✅ 找到用户: {user.email}, ID: {user.id}")
            
            # 3. 验证密码
            print("\n3. 验证密码...")
            if not user.check_password(password):
                print("❌ 密码错误")
                return
            print("✅ 密码验证通过")
            
            # 4. 检查用户状态
            print("\n4. 检查用户状态...")
            if not user.is_active():
                print(f"❌ 用户状态异常: {user.status}")
                return
            print(f"✅ 用户状态正常: {user.status}")
            
            # 5. 清理过期会话
            print("\n5. 清理过期会话...")
            expired_count = UserSession.query.filter(
                UserSession.user_id == user.id,
                UserSession.expires_at < datetime.utcnow()
            ).count()
            print(f"📊 找到 {expired_count} 个过期会话")
            
            UserSession.query.filter(
                UserSession.user_id == user.id,
                UserSession.expires_at < datetime.utcnow()
            ).delete()
            print("✅ 过期会话清理完成")
            
            # 6. 更新最后登录时间
            print("\n6. 更新最后登录时间...")
            user.last_login = get_local_now()
            print(f"✅ 最后登录时间更新为: {user.last_login}")
            
            # 7. 创建新会话
            print("\n7. 创建新会话...")
            session = UserSession(
                user_id=user.id,
                ip_address='127.0.0.1',  # 模拟IP
                user_agent='Test-Agent'   # 模拟User-Agent
            )
            print(f"✅ 会话创建成功: {session.token[:20]}...")
            
            # 8. 提交数据库事务
            print("\n8. 提交数据库事务...")
            db.session.add(session)
            db.session.commit()
            print("✅ 数据库事务提交成功")
            
            # 9. 构建响应数据
            print("\n9. 构建响应数据...")
            response_data = {
                'access_token': session.token,
                'refresh_token': session.refresh_token,
                'expiresAt': session.expires_at.isoformat(),
                'user': user.to_dict()
            }
            print("✅ 响应数据构建成功")
            print(f"📊 Token: {session.token[:20]}...")
            print(f"📊 用户信息: {user.email}")
            
            print("\n🎉 登录逻辑调试完成，所有步骤正常")
            
        except Exception as e:
            print(f"\n❌ 登录逻辑出错: {str(e)}")
            import traceback
            traceback.print_exc()
            db.session.rollback()

if __name__ == '__main__':
    debug_login()